
package workstationbookerweb.fragmentos;

import Fachada.Fachada;
import Servicios.ValidacionDatosEntrada;
import Singletons.Mensajes;
import VO.AdministradorVO;
import VO.SalaVO;
import com.sun.rave.web.ui.appbase.AbstractFragmentBean;
import com.sun.webui.jsf.component.Button;
import com.sun.webui.jsf.component.DropDown;
import com.sun.webui.jsf.component.Label;
import com.sun.webui.jsf.component.PasswordField;
import com.sun.webui.jsf.component.TextField;
import com.sun.webui.jsf.model.SingleSelectOptionsList;
import java.util.ArrayList;
import javax.faces.FacesException;
import javax.faces.context.FacesContext;
import com.sun.webui.jsf.model.Option;
import workstationbookerweb.ApplicationBean1;
import workstationbookerweb.SessionBean1;
import workstationbookerweb.paginas.prueba3;
import workstationbookerweb.RequestBean1;

/**
 * <p>Fragment bean that corresponds to a similarly named JSP page
 * fragment.  This class contains component definitions (and initialization
 * code) for all components that you have defined on this fragment, as well as
 * lifecycle methods and event handlers where you may add behavior
 * @version fragmentoRegistrarAdministrador.java
 * @version Created on 31/05/2011, 10:09:11 PM
 * @author John
 */

public class fragmentoRegistrarAdministrador extends AbstractFragmentBean {
    // <editor-fold defaultstate="collapsed" desc="Managed Component Definition">

    /**
     * <p>Automatically managed component initialization. <strong>WARNING:</strong>
     * This method is automatically generated, so any user-specified code inserted
     * here is subject to being replaced.</p>
     */
    private void _init() throws Exception {
        fachada = Fachada.getInstance();
        listaSalas=fachada.listarSalas();
        if (listaSalas.isEmpty()){
            mensajeL.setText("No hay salas para seleccionar.");
            crearadminB.setDisabled(true);
        }else{
            listaOp=new ArrayList<Option>();
            for (SalaVO svo :listaSalas)
                listaOp.add(new Option(svo.getNombre()));
        }
    }
    private TextField nombreadminTF = new TextField();

    public TextField getNombreadminTF() {
        return nombreadminTF;
    }

    public void setNombreadminTF(TextField tf) {
        this.nombreadminTF = tf;
    }
    private TextField cedulaadminTF = new TextField();

    public TextField getCedulaadminTF() {
        return cedulaadminTF;
    }

    public void setCedulaadminTF(TextField tf) {
        this.cedulaadminTF = tf;
    }
    private PasswordField contrasenaadminTF = new PasswordField();

    public PasswordField getContrasenaadminTF() {
        return contrasenaadminTF;
    }

    public void setContrasenaadminTF(PasswordField pf) {
        this.contrasenaadminTF = pf;
    }
    private PasswordField contrasenaadminconfirmacionTF = new PasswordField();

    public PasswordField getContrasenaadminconfirmacionTF() {
        return contrasenaadminconfirmacionTF;
    }

    public void setContrasenaadminconfirmacionTF(PasswordField pf) {
        this.contrasenaadminconfirmacionTF = pf;
    }
    private TextField correoUnalTF = new TextField();

    public TextField getCorreoUnalTF() {
        return correoUnalTF;
    }

    public void setCorreoUnalTF(TextField tf) {
        this.correoUnalTF = tf;
    }
    private TextField correoAlternativoTF = new TextField();

    public TextField getCorreoAlternativoTF() {
        return correoAlternativoTF;
    }

    public void setCorreoAlternativoTF(TextField tf) {
        this.correoAlternativoTF = tf;
    }
    private TextField direccionAdminTF = new TextField();

    public TextField getDireccionAdminTF() {
        return direccionAdminTF;
    }

    public void setDireccionAdminTF(TextField tf) {
        this.direccionAdminTF = tf;
    }
    private TextField telefonoAdminTF = new TextField();

    public TextField getTelefonoAdminTF() {
        return telefonoAdminTF;
    }

    public void setTelefonoAdminTF(TextField tf) {
        this.telefonoAdminTF = tf;
    }
    private Label nombreL = new Label();

    public Label getNombreL() {
        return nombreL;
    }

    public void setNombreL(Label l) {
        this.nombreL = l;
    }
    private Label cedulaL = new Label();

    public Label getCedulaL() {
        return cedulaL;
    }

    public void setCedulaL(Label l) {
        this.cedulaL = l;
    }
    private Label salaL = new Label();

    public Label getSalaL() {
        return salaL;
    }

    public void setSalaL(Label l) {
        this.salaL = l;
    }
    private Label contrasenaL = new Label();

    public Label getContrasenaL() {
        return contrasenaL;
    }

    public void setContrasenaL(Label l) {
        this.contrasenaL = l;
    }
    private Label confirmarcontrasenaL = new Label();

    public Label getConfirmarcontrasenaL() {
        return confirmarcontrasenaL;
    }

    public void setConfirmarcontrasenaL(Label l) {
        this.confirmarcontrasenaL = l;
    }
    private Label correo_InstitucionalL = new Label();

    public Label getCorreo_InstitucionalL() {
        return correo_InstitucionalL;
    }

    public void setCorreo_InstitucionalL(Label l) {
        this.correo_InstitucionalL = l;
    }
    private Label correoAlternativoL = new Label();

    public Label getCorreoAlternativoL() {
        return correoAlternativoL;
    }

    public void setCorreoAlternativoL(Label l) {
        this.correoAlternativoL = l;
    }
    private Label direccionAdminL = new Label();

    public Label getDireccionAdminL() {
        return direccionAdminL;
    }

    public void setDireccionAdminL(Label l) {
        this.direccionAdminL = l;
    }
    private Label telefonoAdminL = new Label();

    public Label getTelefonoAdminL() {
        return telefonoAdminL;
    }

    public void setTelefonoAdminL(Label l) {
        this.telefonoAdminL = l;
    }
    private Label mensajeL = new Label();

    public Label getMensajeL() {
        return mensajeL;
    }

    public void setMensajeL(Label l) {
        this.mensajeL = l;
    }
    private Button crearadminB = new Button();

    public Button getCrearadminB() {
        return crearadminB;
    }

    public void setCrearadminB(Button b) {
        this.crearadminB = b;
    }
    private Button cancelarnuevoadminB = new Button();

    public Button getCancelarnuevoadminB() {
        return cancelarnuevoadminB;
    }

    public void setCancelarnuevoadminB(Button b) {
        this.cancelarnuevoadminB = b;
    }

    private ArrayList<Option> listaOp = new ArrayList<Option>();

    public ArrayList<Option> getListaOp() {
        return listaOp;
    }

    public void setListaOp(ArrayList<Option> listaOp) {
        this.listaOp = listaOp;
    }

    private ArrayList<SalaVO> listaSalas;

    public ArrayList<SalaVO> getListaSalas() {
        return listaSalas;
    }

    public void setListaSalas(ArrayList<SalaVO> listaSalas) {
        this.listaSalas = listaSalas;
    }

    private SingleSelectOptionsList listasalasDefaultOptions = new SingleSelectOptionsList();

    public SingleSelectOptionsList getListasalasDefaultOptions() {
        return listasalasDefaultOptions;
    }

    public void setListasalasDefaultOptions(SingleSelectOptionsList ssol) {
        this.listasalasDefaultOptions = ssol;
    }

    private DropDown listasalas = new DropDown();

    public DropDown getListasalas() {
        return listasalas;
    }

    public void setListasalas(DropDown dd) {
        this.listasalas = dd;
    }
    // </editor-fold>

    private Fachada fachada;

    public fragmentoRegistrarAdministrador() {
    }

    /**
     * <p>Callback method that is called whenever a page containing
     * this page fragment is navigated to, either directly via a URL,
     * or indirectly via page navigation.  Override this method to acquire
     * resources that will be needed for event handlers and lifecycle methods.</p>
     * <p>The default implementation does nothing.</p>
     */
    @Override
    public void init() {
        super.init();
        // <editor-fold defaultstate="collapsed" desc="Visual-Web-managed Component Initialization">
        // Initialize automatically managed components
        // *Note* - this logic should NOT be modified
        try {
            _init();
        } catch (Exception e) {
            log("Page1 Initialization Failure", e);
            throw e instanceof FacesException ? (FacesException) e: new FacesException(e);
        }
        
        // </editor-fold>
    }

    /**
     * <p>Callback method that is called after rendering is completed for
     * this request, if <code>init()</code> was called.  Override this
     * method to release resources acquired in the <code>init()</code>
     * resources that will be needed for event handlers and lifecycle methods.</p>
     * <p>The default implementation does nothing.</p>
     */
    @Override
    public void destroy() {
    }

    /**
     * <p>Return a reference to the scoped data bean.</p>
     * @return reference to the scoped data bean
     */
    protected fragmentoOpcionesUsuario getfragmentos$fragmentoOpcionesUsuario() {
        return (fragmentoOpcionesUsuario) getBean("fragmentos$fragmentoOpcionesUsuario");
    }

    /**
     * <p>Return a reference to the scoped data bean.</p>
     * @return reference to the scoped data bean
     */
    
    /**
     * <p>Return a reference to the scoped data bean.</p>
     * @return reference to the scoped data bean
     */
    protected ApplicationBean1 getApplicationBean1() {
        return (ApplicationBean1) getBean("ApplicationBean1");
    }

    /**
     * <p>Return a reference to the scoped data bean.</p>
     * @return reference to the scoped data bean
     */
    protected SessionBean1 getSessionBean1() {
        return (SessionBean1) getBean("SessionBean1");
    }
    /**
     * <p>Return a reference to the scoped data bean.</p>
     * @return reference to the scoped data bean
     */
    protected prueba3 getpaginas$prueba3() {
        return (prueba3) getBean("paginas$prueba3");
    }

    /**
     * <p>Return a reference to the scoped data bean.</p>
     * @return reference to the scoped data bean
     */
    protected RequestBean1 getRequestBean1() {
        return (RequestBean1) getBean("RequestBean1");
    }

    /**
     * <p>Maneja la creación de los nuevos administradores</p>
     * @return String
     */
    public String crearadminB_action() {
        limpiarmensajes();
        switch (camposvacios()){
            case 11:
                String mensaje;
                ValidacionDatosEntrada vde = new ValidacionDatosEntrada();
                mensaje= vde.nombreCorrecto(nombreadminTF.getText().toString());
                if (mensaje.equals(Mensajes.ENTRADA_VALIDA)){
                    mensaje=vde.cedulaCorrecta(cedulaadminTF.getText().toString());
                    if (mensaje.equals(Mensajes.ENTRADA_VALIDA)){
                        if (verificarcontraseñas()){
                            mensaje= vde.contrasenaCorrecta(contrasenaadminTF.getText().toString());
                            if (mensaje.equals(Mensajes.ENTRADA_VALIDA)){
                                mensaje = vde.correoCorrecto(correoUnalTF.getText().toString());
                                if (mensaje.equals(Mensajes.ENTRADA_VALIDA)){
                                    mensaje = vde.direccionCorrecta(direccionAdminTF.getText().toString());
                                        if (mensaje.equals(Mensajes.ENTRADA_VALIDA)){
                                            mensaje = vde.telefonoCorrecto(telefonoAdminTF.getText().toString());
                                            if (mensaje.equals(Mensajes.ENTRADA_VALIDA)){
                                                AdministradorVO admin_VO=new AdministradorVO(Long.parseLong(cedulaadminTF.getText().toString().trim()),
                                                        nombreadminTF.getValueAsString(FacesContext.getCurrentInstance()),contrasenaadminTF.getText().toString().trim().toCharArray(),listasalas.getSelected().toString().trim(),
                                                        correoUnalTF.getValueAsString(FacesContext.getCurrentInstance()), correoAlternativoTF.getValueAsString(FacesContext.getCurrentInstance()),
                                                        direccionAdminTF.getValueAsString(FacesContext.getCurrentInstance()), Long.parseLong(telefonoAdminTF.getText().toString().trim()));
                                                mensaje = fachada.registrarAdministrador(admin_VO);
                                                mensajeL.setText(mensaje);
                                                if (mensaje.equals(Mensajes.REGISTRO_ADMINISTRADOR_EXITOSO)){
                                                    mensajeL.setStyle("color : green;height: 24px; left: 432px; top: 312px; position: absolute; width: 310px");
                                                    nombreadminTF.setText("");
                                                    cedulaadminTF.setText("");
                                                    correoUnalTF.setText("");
                                                    correoAlternativoTF.setText("");
                                                    direccionAdminTF.setText("");
                                                    telefonoAdminTF.setText("");
                                                    return "/faces/paginas/OpcionesSuperUsuario.jsp";
                                                }else{
                                                    mensajeL.setStyle("color : red;height: 24px; left: 432px; top: 312px; position: absolute; width: 310px");
                                                }
                                            }else{
                                                telefonoAdminL.setText(mensaje);
                                            }
                                        }else{
                                            direccionAdminL.setText(mensaje);
                                        }
                                    }else{
                                    correo_InstitucionalL.setText(mensaje);
                                }
                           }else{
                            contrasenaL.setText(mensaje);
                            }
                        }else{
                            mensajeL.setText(Mensajes.ERROR_CONTRASENAS);
                        }
                    }else{
                        cedulaL.setText(mensaje);
                    }
                }else{
                    nombreL.setText(mensaje);
                }
                break;
            case 1:
                hacermensaje("'Nombre' ",nombreL);
                break;
            case 2:
                hacermensaje("'Cédula' ", cedulaL);
                   break;
            case 3:
                hacermensaje("'Contraseña' ", contrasenaL);
                break;
            case 4:
                hacermensaje("'Confirmar Contraseña' ", confirmarcontrasenaL);
                break;
            case 5:
                hacermensaje("'Sala' ", salaL);
                break;
            case 6:
                hacermensaje("'Correo Institucional'", correo_InstitucionalL);
                break;
            case 7:
                hacermensaje("'Correo Alternativo'", correoAlternativoL);
                break;
            case 8:
                hacermensaje("'Dirección'", direccionAdminL);
                break;
            case 9:
                hacermensaje("'Teléfono'", telefonoAdminL);
                break;
            case 10:
                mensajeL.setText("Todos los campos están vaciós.");
                mensajeL.setStyle("color : red;height: 24px; left: 432px; top: 312px; position: absolute; width: 310px");
                break;
            }
        return null;
    }

    /**
     * <p>devuleve al super-administrador la pagina principal
     * de super-administrador.</p>
     * @return string
     */
    public String cancelarnuevoadminB_action() {
        return "/faces/paginas/OpcionesSuperUsuario.jsp";
    }

    /**
     * <p>Verifica que los campos necesarios para la creacion
     * del administrador no se escuentren vacíos</p>
     * @return int que indica el campo que se encuentra vacio.
     */
    private int camposvacios(){
        int msm=11;
        try{
            String nombre=nombreadminTF.getText().toString().trim()+"";
            nombreadminTF.setText(nombre);
            String cedula=cedulaadminTF.getText().toString().trim()+"";
            cedulaadminTF.setText(cedula);
            String contrasena=contrasenaadminTF.getText().toString().trim()+"";
            contrasenaadminTF.setPassword(contrasena);
            String confirmarcontrasena= contrasenaadminconfirmacionTF.getText().toString().trim()+"";
            contrasenaadminconfirmacionTF.setPassword(confirmarcontrasena);
            String correoUnal = correoUnalTF.getText().toString().trim()+"";
            correoUnalTF.setText(correoUnal);
            String correoAlternativo = correoAlternativoTF.getText().toString().trim()+"";
            correoAlternativoTF.setText(correoAlternativo);
            String direccion = direccionAdminTF.getText().toString().trim()+"";
            direccionAdminTF.setText(direccion);
            String telefono = telefonoAdminTF.getText().toString().trim()+"";
            telefonoAdminTF.setText(telefono);
            if (nombre.equals("")){
                msm=1;
                return msm;
                }
            if (cedula.equals("")){
                msm=2;
                return msm;
            }
            if (contrasena.equals("")){
                msm=3;
                return msm;
            }
            if (confirmarcontrasena.equals("")){
                msm=4;
                return msm;
            }
            if (listasalas.getSelected()==null){
                msm=5;
                return msm;
            }
            if(correoUnal.equals("")){
                msm=6;
                return msm;
            }
            if(correoAlternativo.equals("")){
                msm = 7;
                return msm;
            }
            if(direccion.equals("")){
                msm = 8;
                return msm;
            }
            if(telefono.equals("")){
                msm = 9;
                return msm;
            }
        }catch (Exception e){
            msm=10;
        }
        return msm;
    }

    /**
     * <p>Borra los datos que tengan los campos nombre,cedula,sala,contraseña,confrimar contraseña, correo institucional, correo alternativo, direccion, telefono y el mensaje</p>
     *
     */
    private void limpiarmensajes(){
        nombreL.setText("");
        cedulaL.setText("");
        contrasenaL.setText("");
        confirmarcontrasenaL.setText("");
        correo_InstitucionalL.setText("");
        correoAlternativoL.setText("");
        direccionAdminL.setText("");
        telefonoAdminL.setText("");
        mensajeL.setText("");
    }

    /**
     * <p>Construye el string para colocarlo en el label de mensaje.</p>
     *
     */
    private void hacermensaje(String campo,Label label) {
        label.setText("*El campo "+ campo +" no puede ser vacío.");
        mensajeL.setText("Llenar los campos indicados.");
        mensajeL.setStyle("color : red ;height: 24px; left: 432px; top: 312px; position: absolute; width: 310px");
    }

    /**
     * <p>Verifica que las contraseñas ingresadas en los campos Contraseña y Confimar Contraseña,
     * coinciden.
     * </p>
     * @return Verdadero: Si las contraseñas coinciden. - Falso: Si las contraseñas no coinciden.
     */
    private boolean verificarcontraseñas() {
        return contrasenaadminTF.getText().toString().trim().equals(contrasenaadminconfirmacionTF.getText().toString().trim());
    }

}